
package wangxiaotao.service;

import lombok.Data;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.ConcurrentHashMap;

@RequiredArgsConstructor
@ServerEndpoint(value = "/pay/{userId}")
@Component
@Data
@Slf4j
public class PaySocketService {

    private static ConcurrentHashMap<String, Session> webSocketMap = new ConcurrentHashMap<>();
    //与某个客户端的连接会话，需要通过它来给客户端发送数据
//    private Session session;
//    private String userId;

    /**
     * 连接建立成功调用的方法
     */
    @OnOpen
    public void onOpen(@PathParam(value = "userId") String userId,Session session) {
        //将当前对象放入map
        webSocketMap.put(userId,session);
    }

    /**
     * 关闭连接
     */
    @OnClose
    public void onOpen(@PathParam(value = "userId") String userId) {
        webSocketMap.remove(userId);  //从set中删除
    }

    /**
     * 收到消息
     */
    @OnMessage
    public void onMessage(String message, Session session) {
        log.info("来自客户端的消息：{}",message);
    }
    /**
     * 发送消息
     * @param message 消息
     */
    public void SendMessage(String userId,String message) {
        try {
            Session session = webSocketMap.get(userId);
            if (session!=null)
                session.getBasicRemote().sendText(message);
            else
                log.error("发送消息出错");
        } catch (IOException e) {
            log.error("发送消息出错：{}", e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 发生消息给指定用户
     * @param message
     * @param userId
     */
    private void sendMessageToUser(String message,String userId){
        Session session = webSocketMap.get(userId.toString());
        if (session==null){
            log.error("找不到该id的客户端");
            return;
        }
        SendMessage(userId,message);
    }
    /**
     * 给所有人发消息
     * @param message
     */
    private void sendAll(String message) {
//        webSocketMap.forEach(()->{
//            System.out.println(item);
//        });
//        //遍历HashMap
//        for (String key : webSocketSet.keySet()) {
//            try {
//                //判断接收用户是否是当前发消息的用户
//                if (!userno.equals(key)) {
//                    webSocketSet.get(key).sendMessage(now + "用户" + userno + "发来消息：" + " <br/> " + sendMessage);
//                    System.out.println("key = " + key);
//                }
//            } catch (IOException e) {
//                e.printStackTrace();
//            }
//        }
    }
}
